package com.swa99ylum.pxf.row.indexer;

import org.apache.poi.xssf.usermodel.XSSFRow;

import com.swa99ylum.pxf.bean.Index;


/**
 * 隔"空"索引器：
 * 当 indexer 拿到 index 后，并不是直接在 当前 index 所指向的列 开始 "填写cell"，
 * 而是 要空开 countdown 数量的 列，才开始 "填写cell"
 */
public class CountdownRowIndexer extends RowIndexer {
	
	/**
	 * countdown0、countdown 的概念，类似于 com.swa99ylum.pxf.bean.Index
	 */
	
	/** base：用于记录 原始值，reset() 会用到 */
	private int countdown0;
	/** offset: 记录着 当前的 偏移量 */
	private int countdown;
	
	
	/** 
	 * 没有提供 index，则：会 紧挨着 前一个表格的 最后一个 cell，进行 "countdown 操作（隔空操作）"。可以参考 RowFiller 中的 处理逻辑
	 */
	public CountdownRowIndexer(int countdown) {
		super();
		this.index = null;
		this.countdown = countdown;
		this.countdown0 = countdown;
	}
	
	/**
	 * 提供了 index，则：从 该 index 所指向的列 开始，进行 "countdown 操作（隔空操作）"，
	 * 由于 index 暴露在外，所以可以 和 其他 indexer 共享 index，达到 "群组式" 的 效果
	 */
	public CountdownRowIndexer(Index index, int countdown) {
		super();
		this.index = index;
		this.countdown = countdown;
		this.countdown0 = countdown;
	}
	

	/**
	 * 开始 的 条件：倒数完毕，即 countdown <= 0
	 */
	public boolean triggerBeginning(XSSFRow row) {
		
		if(countdown <= 0) {//触发开始
			return true;
			
		}else {//无法开始
			
			countdown--;
			
			return false;
			
		}
		
	}
	
	
	/**
	 * 当 多个 行 共享 一组 CellFiller 时，每当 换行
	 * 1) 需要 reset Index
	 * 2) 还需要 reset countdown
	 */
	@Override
	public void resetIndexValue() {
		super.resetIndexValue();
		countdown = countdown0;
	}

}

